package cn.sangedon.review.common.service.data;

import cn.sangedon.review.common.domain.bean.TradeDateList;
import cn.sangedon.review.common.domain.data.TradingDate;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Date;
import java.util.List;

/**
 * @author dongliangqiong
 * @description 针对表【tb_trading_date(交易日历)】的数据库操作Service
 * @createDate 2022-08-30 22:23:49
 */
public interface TradingDateService extends IService<TradingDate> {

    /**
     * 获取最近几个交易日
     *
     * @param num
     * @return
     */
    List<String> getLatestTradingDay(Integer num);

    /**
     * 获取某个时间点之前几个交易日
     *
     * @param num 前几个
     * @param time 时间点
     * @return
     */
    TradeDateList preTradingDay(String time, Integer num);

    /**
     * 获取某个时间点之后几个交易日
     *
     * @param time 时间点
     * @param num 后几个
     * @return
     */
    TradeDateList postTradingDay(String time, Integer num);

    /**
     * 获取某个时间点前后几个交易日
     *
     * @param time 时间点
     * @param preNum 前几个
     * @param postNum 后几个
     * @return
     */
    TradeDateList aroundTradingDay(String time, Integer preNum, Integer postNum);

    /**
     * 获取某个时间范围内的A股交易日
     *
     * @param startTime
     * @param endTime
     * @return
     */
    TradeDateList betweenTradingDay(String startTime, String endTime);

    /**
     * 获取某个交易日往前数的第一个交易日
     *
     * @param tradeDate 交易日
     * @param ageNum 往前数几天
     * @return
     */
    String getTradeDateAgo(String tradeDate, int ageNum);

    /**
     * preTradingDate 和 postTradingDate之间相隔多少个交易日
     *
     * @param preTradingDate
     * @param postTradingDate
     * @return
     */
    Integer distance(String preTradingDate, String postTradingDate);

    /**
     * 判断当前是否是交易时间
     *
     * @param date 判断的时间，为空则表示判断当前时间点
     * @return
     */
    Boolean isTradingHours(Date date);
}
